const request = require('request')
const md5 = require('md5')
const xmlreader = require('xmlreader')
const qrcode = require('qrcode')
const { wxpay } = require('./config')

function do_wxpay(order_sn, money, ip) {
    const api = 'https://api.mch.weixin.qq.com/pay/unifiedorder'
    /********* 1. 先拼出所有的参数 */
    let data = {
        appid: wxpay.appid,
        mch_id: wxpay.mch_id,
        nonce_str: md5(Math.random()),
        body: '充值',
        out_trade_no: order_sn,
        total_fee: money*100,
        spbill_create_ip: ip,
        notify_url: wxpay.notify_url,
        trade_type: 'NATIVE'
    }
    /******** 2. 把数据转成 XML 并生成签名 */
    // 数据转成 xml
    let xmlData = '<xml>'
    let arr = []
    for(let i in data) {
        xmlData += `<${i}>${data[i]}</${i}>`
        arr.push(i+'='+data[i])
    }
    // 签名
    let sign = md5(arr.sort().join('&') + '&key='+wxpay.key).toUpperCase()
    xmlData += `<sign>${sign}</sign>`
    xmlData += '</xml>'


    return new Promise((resolve, reject) => {
        /******* 3. 调用接口 */
        request.post(api, {body: xmlData}, (err, res, body)=>{
            
            /******* 4. 解析返回的xml */
            // 解析 XML 数据
            xmlreader.read(body, (err, res)=>{

                // 取出第一个 code_url 中的内容
                let qrcodeTxt = res.xml.code_url.at(0).text()
                /****** 5.使用返回的数据生成二维码图片字符串 */
                // 生成二维码图片
                qrcode.toDataURL(qrcodeTxt, function (err, url) {
                    resolve(url)
                })

            })
        })
    })
    
}

module.exports = {
    do_wxpay
}
